#ifndef _NET_PROTOCOL_H_
#define _NET_PROTOCOL_H_

#ifdef __cplusplus
extern "C" {
#endif

#define MSG_HEAD 0x2323

{%- for 消息体类型 in 消息体字典.keys() %}

struct TNetProtocolMsgBody{{消息体类型.split()[0]}}Tag
{
    {%- for 消息体中的一个字段 in 消息体字典[消息体类型] %}
    {{获取表达式(消息体中的一个字段)}}
    {%- endfor %}
};
typedef struct TNetProtocolMsgBody{{消息体类型.split()[0]}}Tag TNetProtocolMsgBody{{消息体类型.split()[0]}};
{%- endfor %}

struct TNetProtocolMsgTag
{
{%- for 消息结构表中的一个字段 in 消息结构表 %}
    {%- if [消息结构表中的一个字段[0]] == ["MsgBody"] %}
    union {
        {%- for 消息体类型 in 消息体字典.keys() %}
        TNetProtocolMsgBody{{消息体类型.split()[0]}} {{消息体类型.split()[0]}};
        {%- endfor %}
    } MsgBody;
    {%- else %}
    {{获取表达式(消息结构表中的一个字段)}}
    {%- endif %}
{%- endfor %}
};
typedef struct TNetProtocolMsgTag TNetProtocolMsg;

int TNetProtocolEncode(unsigned char* out_buf, int out_buf_size, TNetProtocolMsg* in_msg);

int TNetProtocolDecode(TNetProtocolMsg* out_msg, unsigned char* in_buf, int in_buf_len);

#ifdef __cplusplus
}
#endif

# endif ///< _NET_PROTOCOL_H_
